// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of dart.core;

/**
 * 表示对象的一个成员的调用过程。
 *
 * 当对象不支持试图进行的成员调用时，会将这个类型的对象传递给[Object.noSuchMethod]。
 */
abstract class Invocation {
  /** 被调用的成员的名称。 */
  Symbol get memberName;

  /**
   * 调用过程使用的、不可更改的位置参数的列表。
   *
   * 如果调用的成员是getter方法，List为空。
   */
  List get positionalArguments;

  /**
   * 调用过程使用的、不可更改的命名参数的列表。
   *
   * 如果调用的成员是getter、setter或操作符操作，List为空。
   */
  Map<Symbol, dynamic> get namedArguments;

  /** 调用的成员是否是一个方法。*/
  bool get isMethod;

  /**
   * 调用的成员是否是一个getter。
   *
   * 如果是true，位置参数和命名参数都为空。
   */
  bool get isGetter;

  /**
   * 调用的成员是否是一个setter。
   *
   * 如果是true，[arguments]恰好有一个位置参数，并且[namedArguments]为空。
   */
  bool get isSetter;

  /** 调用的成员是否是一个访问器（accessor，即getter或setter）。 */
  bool get isAccessor => isGetter || isSetter;
}
